#include <stdio.h>
#include <stdlib.h>

void testMalloc2() {
    void *p;
    int cnt = 0;
    while (p=malloc(1024 * 1024 * 100))
    {
        cnt++;
    }
    printf("memory=%d00M", cnt);
}

void testMalloc() {
    int *a;
    int number = 100;
    // 分配空间
    a = malloc(sizeof(int) * number);
    // 赋值
    for (int i = 0; i < number; i++)
    {
        a[i] = i;
    }

    printf("a[77] = %d", a[77]);

    // 归还
    free(a);
}

void testConst() {
    int i = 100;
    // 
    {
        // 表示指针指向的是常量，指针内容不能被修改
        // const int * p = &i;
        int const * p = &i;
        // *p = 200;//报错

        // 指针可以指向其他内容
        int j = 200;
        p = &j;
    }

    {
        // 指针本身是常量，指针本身不能更改
        int *const p = &i;
        // p++;//报错
        // p = &j;//报错
        int j = 200;
        *p = j;
    }
}

void testArrPointer() {
    char ac[] = {1, 2, 3, 4, 5, 6};
    char *p = ac;
    printf("p = %p\n", *p);
    printf("p = %p\n", *(p + 1));

    printf("p = %p\n", p);
    printf("p = %p\n", p + 1);
    
    printf("p = %x\n", p);
    printf("p = %x\n", p + 1);

    printf("*p = %d\n", *p);
    printf("*p++ = %d\n", *(p+1));


    int ai[] = {1, 2, 3, 4, 5, 6};
    int *q = &ai;
    printf("q = %p\n", q);
    printf("q = %p\n", q + 1);

}

int main() {
    // printf("pointer");
    // int a;
    // int *pA = &a;
    // printf("Address of a = 0x%x\n", pA);
    // printf("Address of a = %p\n", a);

    // testConst();
    // testArrPointer();
    // testMalloc();
    testMalloc2();
}
